package com.efrei.schoolmanager.views;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

public class BarreChargement extends JDialog {
	private static final long serialVersionUID = -4225900987910695058L;
	private JLabel messageLabel;
	private JProgressBar progressBar;
	private JPanel mainPanel;

	public BarreChargement(JFrame frame) {
		// Rendre la vue modale
		super(frame, "Chargement en cours ...", true);
		initComposants();
		remplirMainPanel();
		configurerVue();

	}

	/**
	 * Configurer les options de la vue ainsi que son contentPane
	 * 
	 */
	private void configurerVue() {
		getContentPane().add(mainPanel);
		// Positionnement au centre de l'ecran
		setLocationRelativeTo(null);
		// Suppression de la barre superieur de la fenetre
		setUndecorated(true);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		// Redimensionnement auto de la vue
		pack();

	}

	/**
	 * Initialiser le panel principal et le remplir
	 * 
	 */
	private void remplirMainPanel() {
		// Creation du panel
		mainPanel = new JPanel();
		// Gestionnaire de positionnement des composants
		BoxLayout layout = new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS);
		mainPanel.setLayout(layout);
		// Couleur de fond du panel
		mainPanel.setBackground(Color.white);

		// Positionnement vertical des composants
		Box box = Box.createVerticalBox();
		// Ajout d'une zone vide
		box.add(Box.createRigidArea(new Dimension(0, 5)));
		box.add(messageLabel);
		box.add(Box.createRigidArea(new Dimension(0, 10)));
		box.add(progressBar);
		// Ajout du groupe vertical au panel
		mainPanel.add(box);
		// Bordure du pannel
		mainPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
	}

	/**
	 * Initaliser et configurer tous les composants
	 * 
	 */
	private void initComposants() {
		// Message d'information
		messageLabel = new JLabel("Chargement en cours...");
		messageLabel.setFont(new Font("Arial", Font.BOLD, 15));
		messageLabel.setPreferredSize(new Dimension(120, 18));

		// Barre de progression avec chargement de type indetermine,
		// ie sans pourcentage
		progressBar = new JProgressBar();
		progressBar.setIndeterminate(true);

	}

	/**
	 * Affiche la fenetre de chargement
	 */
	public void showDialog() {
		setVisible(true);
	}

	/**
	 * Ferme la fenetre de chargement
	 */
	public void close() {
		// Libere les ressources
		dispose();
		setVisible(false);
	}
}
